package sjms.behavior.template;

/**
 * @ClassName:
 * @Description:
 * @Author fcb
 * @Date 2020/7/12 14:51
 */
public abstract class Model {

    abstract void step1();

    abstract void step2();

    abstract void step3();

    public final void run(){
        this.step1();
        this.step2();
        if(this.isStep3()){
            this.step3();
        }
    }

    /**
     * 钩子方法，
     * 通过子类复写该方法来决定最终的执行行为
     * @return
     */
    protected boolean isStep3(){
        return true;
    }
}
